Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.04.2013, 01:39
Профессор
Отправить личное сообщение для (Sandr) Посмотреть профиль Найти все сообщения от (Sandr)
 
Регистрация: 14.10.2010
Сообщений: 376

Понимание асинхронности в node.js
Всем привет.
Недавно начал изучать ноду, и столкнулся с непониманием того, как нужно правильно писать в асинхронном стиле.
Попытаюсь объяснить суть проблемы на простом примере чтения данных с различных источников.

Как я делал в пхп:

//Считывал содержимое файла в переменную ($file).
//Делал запрос на некий url и получал данные ($curl).
//Делал запрос к бд и выбираю нужные данные ($db).
//А потом вывожу их в нужной мне последовательности
echo $file;
echo $db;
echo $curl;


Как подобное делается в ноде?

Или вот простой пример чтения файла и вывода его содержимого:

var fs = require('fs'),
    fileText = '',
    fileText2 = '';

fs.readFile('file.txt', 'utf-8', function(err, data) {
  fileText = data;
  console.log('\ncallback вызван\n');
});
fs.readFile('file2.txt', 'utf-8', function(err, data) {
  fileText2 = data;
  console.log('\ncallback2 вызван\n');
});

console.log('\n\n__начало html-разметки__\n\n' + fileText + '\n\n__прочий html-код__' + fileText2);



Если запустить этот код, то при удачном выполнении выведется сначало содержимое последней строки, а только потом коллбэки, хотя, как видите, нужно несколько другое.


Не побрезгаю ссылками на статьи(с примерами) на английском/русском языке

Последний раз редактировалось (Sandr), 05.04.2013 в 23:36.
Ответить с цитированием
  #2 (permalink)  
Старый 05.04.2013, 10:41
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

Асинхронная синхронность в node.js
__________________
.ня
Ответить с цитированием
  #3 (permalink)  
Старый 05.04.2013, 11:47
Аватар для keen
Профессор
Отправить личное сообщение для keen Посмотреть профиль Найти все сообщения от keen
 
Регистрация: 28.03.2012
Сообщений: 376

смотри.

console.log('a');
someAsyncFunc(function () { // некая асинхронная функция
	    console.log('b');
});
console.log('c');

тут выведется последовательно a, c, b

смысл такой: в коллбэке асинхронной функции мы говорим что делать, когда она выполнится. как правило, асинхронные функции связаны с большими временными затратами - чтение файлов например. и вот чтобы весь процесс не простаивал пока это происходит, и нужны подобные инструкции.

ну и нелишним будет почитать вот это http://learn.javascript.ru/

Сообщение от tenshi Посмотреть сообщение
Асинхронная синхронность в node.js
без понимания основ асинхронности эта библиотека вообще запутает.
Ответить с цитированием
  #4 (permalink)  
Старый 05.04.2013, 16:40
Профессор
Отправить личное сообщение для SV0L0CH Посмотреть профиль Найти все сообщения от SV0L0CH
 
Регистрация: 07.11.2010
Сообщений: 301

Если надо побыстрому перевссти код с PHP, то можно срару брать библиотечные функции которые заканчиваются на 'Sync', а уже потом думать над оптимизациями.
Ответить с цитированием
  #5 (permalink)  
Старый 05.04.2013, 23:35
Профессор
Отправить личное сообщение для (Sandr) Посмотреть профиль Найти все сообщения от (Sandr)
 
Регистрация: 14.10.2010
Сообщений: 376

tenshi,
это не то. Мне не нужны какие-то библиотеки, мне нужно понять как работать со всей этой асинхронностью.
Ответить с цитированием
  #6 (permalink)  
Старый 05.04.2013, 23:41
Профессор
Отправить личное сообщение для (Sandr) Посмотреть профиль Найти все сообщения от (Sandr)
 
Регистрация: 14.10.2010
Сообщений: 376

keen,
Цитата:
смысл такой: в коллбэке асинхронной функции мы говорим что делать, когда она выполнится. как правило, асинхронные функции связаны с большими временными затратами - чтение файлов например. и вот чтобы весь процесс не простаивал пока это происходит, и нужны подобные инструкции.
Я всё это понимаю(собственно, по этому в моём примере идёт работа с файлами). Я не понимаю как это правильно применять.
Я был бы очень благодарен, если бы вы(или кто-то другой) изменили мой пример так, чтобы он правильно выводил нужную информацию.
Ответить с цитированием
  #7 (permalink)  
Старый 05.04.2013, 23:43
Профессор
Отправить личное сообщение для (Sandr) Посмотреть профиль Найти все сообщения от (Sandr)
 
Регистрация: 14.10.2010
Сообщений: 376

SV0L0CH,
нет, мне не нужно по быстрому переводить код с PHP. Да и вот эта лепка с *Sync будет идеологически не правильной, так как смысл использования ноды практически теряется.
Ответить с цитированием
  #8 (permalink)  
Старый 06.04.2013, 00:11
Профессор
Отправить личное сообщение для (Sandr) Посмотреть профиль Найти все сообщения от (Sandr)
 
Регистрация: 14.10.2010
Сообщений: 376

Дзен-трансгуманист,
пожалуйста, не нужно мне пихать различные библиотеки, которые позволяют писать в синхронном стиле. Мне это не нужно. Как уже выше сказал keen, без понимания основ, всё это меня запутает. Когда мне понадобятся библиотеки, то я буду искать именно библиотеки, а не изучать основы.
Ответить с цитированием
  #9 (permalink)  
Старый 07.04.2013, 09:38
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

(Sandr), с ней лучше не работать)
__________________
.ня
Ответить с цитированием
  #10 (permalink)  
Старый 07.04.2013, 09:41
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

var fs = require('fs'),
    fileText = '',
    fileText2 = '';

fs.readFile('file.txt', 'utf-8', function(err, data) {
  fileText = data;
  console.log('\ncallback вызван\n');

  fs.readFile('file2.txt', 'utf-8', function(err, data) {
    fileText2 = data;
    console.log('\ncallback2 вызван\n');

    console.log('\n\n__начало html-разметки__\n\n' + fileText + '\n\n__прочий html-код__' + fileText2);
  });
});
__________________
.ня
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Node.js - сессии Scrin Серверные языки и технологии 38 06.05.2013 21:51
Недопонимание философии Node.js Voronar AJAX и COMET 10 25.02.2013 14:00
Востребованность разработчиков на Node.js danik.js AJAX и COMET 7 08.12.2012 22:49
Разработчик Node.js в США (Сиэтл) Akvelon Работа 0 29.08.2012 10:47
Node.js Kolyaj Серверные языки и технологии 49 24.05.2010 22:29